/*
和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。

现在，给定一个整数数组，你需要在所有可能的子序列中找到最长的和谐子序列的长度。

示例 1:

输入: [1,3,2,2,5,2,3,7]
输出: 5
原因: 最长的和谐数组是：[3,2,2,2,3].
说明: 输入的数组长度最大不超过20,000.

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/longest-harmonious-subsequence
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
*/

class Solution {
public:
    int findLHS(vector<int>& nums) {
        if(nums.empty()){
            return 0;
        }
        unordered_map<int,int> umap;
        vector<int> tmp;
        for(auto&i:nums){
            if( umap.find(i) != umap.end()){
                umap[i]++;
            } else{
                umap.insert(make_pair(i,1));
                tmp.push_back(i);
                //cout<<"element:"<<i<<endl;
            }
        }
        int two_max=0;
        sort(tmp.begin(),tmp.end());
        
        for(int i=0;i<tmp.size()-1;i++){
            
            if(tmp[i]-tmp[i+1]==-1){
                if(umap[tmp[i]]+umap[tmp[i+1]]>two_max){
                    two_max=umap[tmp[i]]+umap[tmp[i+1]];
                    //cout<<"two_max:"<<two_max<<endl;
                }
            }
        }
        return two_max;
    }
};